package com.artisan.si.service;

import com.artisan.si.model.User;
import com.artisan.si.repository.UserRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * User 业务逻辑服务类
 * 负责处理用户相关的业务逻辑
 */
@Service
public class UserService {
    
    private static final Logger logger = LoggerFactory.getLogger(UserService.class);
    
    private final UserRepository userRepository;

    /**
     * 构造函数注入
     * @param userRepository 用户数据访问层
     */
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    /**
     * 处理用户注册的业务方法
     * 这个方法会被 Spring Integration 的 ServiceActivator 调用
     * @param user 待注册的用户
     * @return 处理后保存的用户
     */
    @Transactional
    public User handleUserRegistration(User user) {
        logger.info("开始处理用户注册: {}", user);
        
        // 在真实场景中，这里可以进行：
        // 1. 重复性检查（邮箱、用户名唯一性）
        // 2. 密码加密处理
        // 3. 发送欢迎邮件
        // 4. 发布用户注册事件
        // 5. 调用外部服务（如用户画像服务）
        
        // 检查邮箱是否已存在
        if (userRepository.existsByEmail(user.getEmail())) {
            throw new IllegalArgumentException("邮箱已存在: " + user.getEmail());
        }
        
        // 检查用户名是否已存在
        if (userRepository.existsByUsername(user.getUsername())) {
            throw new IllegalArgumentException("用户名已存在: " + user.getUsername());
        }
        
        // 创建新的用户实例，确保总是插入新记录
        User newUser = new User();
        newUser.setEmail(user.getEmail().toLowerCase().trim()); // 标准化邮箱
        newUser.setUsername(user.getUsername().trim());
        newUser.setFullName(user.getFullName().trim());
        newUser.setPhone(user.getPhone() != null ? user.getPhone().trim() : null);
        
        logger.debug("创建新用户实例: email={}, username={}", 
                    newUser.getEmail(), newUser.getUsername());
        
        // 保存用户到数据库
        User savedUser = userRepository.save(newUser);
        
        logger.info("UserService: 成功注册用户 id={}, email={}, username={}", 
                   savedUser.getId(), savedUser.getEmail(), savedUser.getUsername());
        
        return savedUser;
    }
    
    /**
     * 验证用户数据的业务方法
     * @param user 待验证的用户
     * @return 验证结果
     */
    public boolean validateUser(User user) {
        if (user == null) {
            logger.warn("用户为空，验证失败");
            return false;
        }
        
        if (user.getEmail() == null || user.getEmail().trim().isEmpty()) {
            logger.warn("邮箱为空，验证失败: {}", user);
            return false;
        }
        
        if (user.getUsername() == null || user.getUsername().trim().isEmpty()) {
            logger.warn("用户名为空，验证失败: {}", user);
            return false;
        }
        
        if (user.getFullName() == null || user.getFullName().trim().isEmpty()) {
            logger.warn("全名为空，验证失败: {}", user);
            return false;
        }
        
        // 简单的邮箱格式验证
        if (!user.getEmail().contains("@") || !user.getEmail().contains(".")) {
            logger.warn("邮箱格式无效，验证失败: {}", user);
            return false;
        }
        
        logger.debug("用户验证通过: {}", user);
        return true;
    }
}
